
const express = require('express');
const alipay = express.Router();
const query = require('../../pool');
// alipay.get('/',(req,res)=>{
//   res.send('hello')
// })

const fs = require("fs");
const path = require("path");

const AlipaySDK = require("alipay-sdk").default;
const AlipayFormData = require("alipay-sdk/lib/form").default;
// 调用支付宝接口
alipay.get('/pay?:orderId', async (req, res) => {
  let obj = req.query;
//console.log(obj)
  let price=obj.price*1/100;
  //设置允许跨域的域名，*代表允许任意域名跨域
  res.setHeader('Access-Control-Allow-Origin', '*');
  //允许的header类型
  res.header("Access-Control-Allow-Headers", "content-type");
  //跨域允许的请求方式 
  res.header("Access-Control-Allow-Methods", "DELETE,PUT,POST,GET,OPTIONS");
  const alipaySdk = new AlipaySDK({
    appId: "2021000118652380", // 你自己的沙箱黄环境的appId
    privateKey: fs.readFileSync(
      path.join(__dirname, "../../config/pem/private_key.pem"),
      "ascii"
    ), // 私钥
    signType: "RSA2", // 签名类型
    alipayPublicKey: fs.readFileSync(
      path.join(__dirname, "../../config/pem/alipay_public_key.pem"),
      "ascii"
    ), // 支付宝公钥（不是应用公钥）
    gateway: "https://openapi.alipaydev.com/gateway.do", // 网关地址
    timeout: 5000, // 网关超时时间
    camelcase: true // 是否把网关返回的下划线 key 转换为驼峰写法
  });

  /**
      * 返回支付链接（PC支付接口）
      */
  const formData = new AlipayFormData();
  formData.setMethod("get");
  formData.addField("appId", "2021000118652380");
  formData.addField("charset", "utf-8");
  formData.addField("signType", "RSA2");
  formData.addField('notifyUrl', 'http://hishishi.top:8000/v1/alipay');
  formData.addField("bizContent", {
    outTradeNo: obj.orderId,// 【必选】商户订单号：64个字符内，包含数字，字母，下划线；需要保证在商户端不重复
    productCode: "FAST_INSTANT_TRADE_PAY",// 【必选】销售产品码，目前仅支持FAST_INSTANT_TRADE_PAY
    totalAmount: price,// 【必选】订单总金额，精确到小数点后两位
    subject: "test",// 【必选】 订单标题
    body: "vip", // 【可选】订单描述
    token:obj.token,
  });
  formData.addField('returnUrl', `http://hishishi.top:8000/confirm?id=${obj.orderId}`);//加在这里才有效果,不是加在bizContent 里面
  /**
   * exec对应参数：
   * method（调用支付宝api）
   * params（api请求的参数（包含“公共请求参数”和“业务参数”））
   * options（validateSign，formData，log）
   */

  const result = await alipaySdk.exec(
    "alipay.trade.wap.pay",
    {},
    { formData }
  );
  // console.log(result); // result为可以跳转到支付连接的url
  // console.log(object)
  res.send({ code: 1, msg: 'success', data: result });
})

alipay.post('/', async(req, res) => {
  // console.log(req.body)
  if(req.body.trade_status=='TRADE_SUCCESS'&&req.body.body=='vip'){
    let sql = 'update cake_user set user_role = 1 where eMail = ?'
    let params = [req.body.buyer_logon_id]
    console.log(req.body.buyer_logon_id)
    let result = await query(sql,params)
    // console.log(result)
  }
  })

module.exports = alipay;
